@@ -225,6 +225,19 @@ class Agent < ActiveRecord::Base |
||
| 225 | 225 |
# Implement me in your subclass to test for valid options. |
| 226 | 226 |
end |
| 227 | 227 |
|
| 228 |
+ # Utility Methods |
|
| 229 |
+ |
|
| 230 |
+ def boolify(option_value) |
|
| 231 |
+ case option_value |
|
| 232 |
+ when true, 'true' |
|
| 233 |
+ true |
|
| 234 |
+ when false, 'false' |
|
| 235 |
+ false |
|
| 236 |
+ else |
|
| 237 |
+ nil |
|
| 238 |
+ end |
|
| 239 |
+ end |
|
| 240 |
+ |
|
| 228 | 241 |
# Class Methods |
| 229 | 242 |
|
| 230 | 243 |
class << self |
@@ -139,9 +139,7 @@ module Agents |
||
| 139 | 139 |
|
| 140 | 140 |
%w[ssl mark_as_read].each { |key|
|
| 141 | 141 |
if options[key].present? |
| 142 |
- case options[key] |
|
| 143 |
- when true, false |
|
| 144 |
- else |
|
| 142 |
+ if boolify(options[key]).nil? |
|
| 145 | 143 |
errors.add(:base, '%s must be a boolean value' % key) |
| 146 | 144 |
end |
| 147 | 145 |
end |
@@ -204,7 +202,7 @@ module Agents |
||
| 204 | 202 |
end |
| 205 | 203 |
} |
| 206 | 204 |
when 'has_attachment' |
| 207 |
- case value |
|
| 205 |
+ case boolify(value) |
|
| 208 | 206 |
when true, false |
| 209 | 207 |
else |
| 210 | 208 |
errors.add(:base, 'conditions.%s must be a boolean value or null' % key) |
@@ -260,7 +258,7 @@ module Agents |
||
| 260 | 258 |
} |
| 261 | 259 |
} |
| 262 | 260 |
when 'has_attachment' |
| 263 |
- value == mail.has_attachment? |
|
| 261 |
+ boolify(value) == mail.has_attachment? |
|
| 264 | 262 |
else |
| 265 | 263 |
log 'Unknown condition key ignored: %s' % key |
| 266 | 264 |
true |
@@ -294,7 +292,7 @@ module Agents |
||
| 294 | 292 |
notified << mail.message_id if mail.message_id |
| 295 | 293 |
end |
| 296 | 294 |
|
| 297 |
- if interpolated['mark_as_read'] |
|
| 295 |
+ if boolify(interpolated['mark_as_read']) |
|
| 298 | 296 |
log 'Marking as read' |
| 299 | 297 |
mail.mark_as_read |
| 300 | 298 |
end |
@@ -303,6 +301,7 @@ module Agents |
||
| 303 | 301 |
|
| 304 | 302 |
def each_unread_mail |
| 305 | 303 |
host, port, ssl, username = interpolated.values_at(:host, :port, :ssl, :username) |
| 304 |
+ ssl = boolify(ssl) |
|
| 306 | 305 |
|
| 307 | 306 |
log "Connecting to #{host}#{':%d' % port if port}#{' via SSL' if ssl}"
|
| 308 | 307 |
Client.open(host, Integer(port), ssl) { |imap|
|
@@ -118,11 +118,19 @@ describe Agents::ImapFolderAgent do |
||
| 118 | 118 |
end |
| 119 | 119 |
|
| 120 | 120 |
it 'should validate the boolean fields' do |
| 121 |
- @checker.options['ssl'] = false |
|
| 122 |
- @checker.should be_valid |
|
| 121 |
+ %w[ssl mark_as_read].each do |key| |
|
| 122 |
+ @checker.options[key] = 1 |
|
| 123 |
+ @checker.should_not be_valid |
|
| 123 | 124 |
|
| 124 |
- @checker.options['ssl'] = 'true' |
|
| 125 |
- @checker.should_not be_valid |
|
| 125 |
+ @checker.options[key] = false |
|
| 126 |
+ @checker.should be_valid |
|
| 127 |
+ |
|
| 128 |
+ @checker.options[key] = 'true' |
|
| 129 |
+ @checker.should be_valid |
|
| 130 |
+ |
|
| 131 |
+ @checker.options[key] = '' |
|
| 132 |
+ @checker.should be_valid |
|
| 133 |
+ end |
|
| 126 | 134 |
end |
| 127 | 135 |
|
| 128 | 136 |
it 'should validate regexp conditions' do |